﻿using ExcellentProjectPlus.Aplicacion.Examenes;
using ExcellentProjectPlus.Aplicacion.Examenes.RespuestaExamenes;
using ExcellentProjectPlus.Dominio.Examenes.Entidades;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Description;

namespace Servicios.Examenes.Controllers
{
    public class RespuestaExamenesController : ApiController
    {
        #region Propiedades
        IServicioDeGestionDeRespuestaExamenes _servicioDeGestionDeRespuestaExamenes;
        #endregion

        #region Constructores
        public RespuestaExamenesController(IServicioDeGestionDeRespuestaExamenes servicioDeGestionDeRespuestaExamenes)
        {
            _servicioDeGestionDeRespuestaExamenes = servicioDeGestionDeRespuestaExamenes;
        }
        #endregion

        //GET
        [HttpGet]
        [ResponseType(typeof(RespuestaExamen))]
        public IHttpActionResult Get()
        {
            IEnumerable<RespuestaExamen> respuestaexamenes = _servicioDeGestionDeRespuestaExamenes.ObtenerRespuestaExamenes();
            if (respuestaexamenes == null)
            {
                return NotFound();
            }

            return Ok(respuestaexamenes);
        }


        //GET
        [HttpGet]
        [Route("api/respuestaexamenes/{id}")]
        [ResponseType(typeof(RespuestaExamen))]
        public IHttpActionResult GetRespuestaExamen(int id)
        {
            RespuestaExamen respuestaexamen = _servicioDeGestionDeRespuestaExamenes.ObtenerRespuestaExamenPorId(id);
            if (respuestaexamen == null)
            {
                return NotFound();
            }

            return Ok(respuestaexamen);
        }

        [HttpPost]
        [ResponseType(typeof(RespuestaExamen))]
        public IHttpActionResult Post(RespuestaExamen respuestaexamen)
        {
            if (!ModelState.IsValid)
                return BadRequest(ModelState);

            _servicioDeGestionDeRespuestaExamenes.AgregarRespuestaExamen(respuestaexamen);

            return CreatedAtRoute("DefaultApi", new { id = respuestaexamen.IdRespuestaExamen }, respuestaexamen);
        }

        [HttpPut]
        [Route("api/respuestaexamenes/{id}")]
        [ResponseType(typeof(RespuestaExamen))]
        public IHttpActionResult Put(int id, [FromBody]RespuestaExamen respuestaexamen)
        {
            if (!ModelState.IsValid)
                return BadRequest(ModelState);

            if (id != respuestaexamen.IdRespuestaExamen)
                return BadRequest();

            _servicioDeGestionDeRespuestaExamenes.ModificarRespuestaExamen(respuestaexamen);

            return StatusCode(HttpStatusCode.NoContent);

        }

        [HttpDelete]
        [Route("api/respuestaexamenes/{id}")]
        [ResponseType(typeof(RespuestaExamen))]
        public IHttpActionResult Delete(int id)
        {
            RespuestaExamen respuestaexamen = _servicioDeGestionDeRespuestaExamenes.ObtenerRespuestaExamenPorId(id);

            if (respuestaexamen == null)
                return NotFound();

            _servicioDeGestionDeRespuestaExamenes.EliminarRespuestaExamen(respuestaexamen);
            return Ok(respuestaexamen);
        }
        private bool RespuestaExamenExists(int id)
        {
            return _servicioDeGestionDeRespuestaExamenes.ObtenerRespuestaExamenPorId(id) != null;
        }


        [HttpGet()]
        [Route("api/respuestaexamenes/GetPagedRespuestaExamenes/{pageIndex}/{pageSize}")]
        public IEnumerable<RespuestaExamen> GetPagedRespuestaExamenes(int pageIndex, int pageSize)
        {
            return _servicioDeGestionDeRespuestaExamenes.ObtenerRespuestaExamenesPaginado(pageIndex, pageSize);
        }
    }
}